home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / mus / misc / The_Player_6_0A.lha / Player6.0A / Docs / Player60A.doc < prev    next >
Text File  |  1994-01-22  |  21KB  |  605 lines

  1. ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  2. ­               The Player ® 6.0A 600.2 / 22.01.94        ­
  3. ­               Copyright © 1992-94 Jarno Paananen        ­
  4. ­                Guru / Sahara Surfers            ­
  5. ­             A Sahara Surfers Product 1994            ­
  6. ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  7.  
  8.  
  9.     Contents:
  10.         ­­­­­­­­­
  11.  
  12.     1. Foreword
  13.  
  14.     2. Distribution and copyrights
  15.  
  16.     3. Requirements
  17.  
  18.     4. Features
  19.  
  20.     5. P60con, the Converter
  21.         1. Converting Protracker-modules
  22.         2. Playing modules
  23.         3. Converting back to Protracker
  24.         4. Sample packer-selector
  25.         5. Preferences
  26.  
  27.     6. P60, the Player
  28.  
  29.     7. Using The Player in your own programs
  30.         1. Normal VBlank-version
  31.         2. Non-lev6-version
  32.         3. CIA-version with tempo
  33.         4. 68020-versions
  34.         5. Player.i
  35.  
  36.     8. The Usecode-system
  37.  
  38.     9. Bugs?
  39.  
  40.     10. Hellos
  41.  
  42.     11. Contact address
  43.  
  44.  
  45.  
  46. 1. Foreword:
  47. ­­­­­­­­­­­­
  48.  
  49. This little utility was first started just for fun about two years ago and was
  50. meant just to my own use, but when I noticed that there weren't a GOOD
  51. Protracker-compatible replay available and after I saw a few tries to fix this
  52. (ProPacker, Prorunner, etc.) I decided to give other people a chance to play
  53. their Protracker-tunes FAST!
  54.  
  55. When designing the moduleformat, I also included packing and this 6.0 packing
  56. method is the most efficient I've seen for this purpose.
  57.  
  58. Afterwards features like the two delta-formats have been introduced to keep this
  59. player on the edge of development.
  60.  
  61. I also made a converter to make it easier to use PT-modules. It uses Reqtools
  62. and Powerpacker libraries (both by Nico François) so it can also load
  63. Powerpacked modules. The converter is made as easy as possible to the user.
  64.  
  65.  
  66.  
  67. 2. Distribution and copyrights:
  68. ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  69.  
  70. This program and all other stuff coming in this package are FULLY copyrighted
  71.                 by Jarno Paananen / Guru of Sahara Surfers.
  72.         ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  73. With the exception of Reqtools and Powerpacker libraries © by Nico François
  74. (You have made a big favour to all programmers on the Amiga!)
  75.  
  76. BUT!:
  77. ­­­­­
  78. You're allowed to make additions or modifications or what so ever to fit
  79. the playroutine to your own needs. That's why the sources are here. But,
  80. please: credits for the author and a copy to myself, if possible, so I can
  81. add your new features to the future releases!
  82.  
  83.  
  84. Contents of this package:
  85. ­­­­­­­­­­­­­­­­­­­­­­­­­
  86. P60Con                - The converter
  87. P60Con.info            - Da icon
  88. P60                - The player
  89. P60.info            - Another icon
  90. P50to60                - Converter for old modules
  91. P50to60.info            - An icon perhaps?
  92. Player60A.guide            - Amigaguide format docs
  93. Player60A.guide.info        - More same stuff
  94. Player60A.doc            - ASCII format docs, this file
  95. Player60A.doc.info        - Do we have to take all these?
  96. Player60A.changes        - History of changes, bugfixes and everything
  97. 600.2.G                - The main thing, Replay source
  98. 600.2_devpac2.asm        - Same for DevPac2
  99. 600.2_devpac3.asm        - And for DevPac3
  100. 600.2.bin            - Binary version
  101. CIA_Example.G            - An example of how to use the CIA-version
  102. Player6.i            - Include file
  103. Vibtab                - 1kb vibratotable
  104. Periods                - Periodtable with finetunes
  105. Periods.nft            - Same with no finetunes
  106.  
  107.  
  108. The normal disclaimer:
  109.  
  110. The author cannot be held liable for the suitability or accuracy of this manual
  111. and/or the program it describes. Any damage directly or indirectly caused by
  112. the use or misuse of this manual and/or the program it describes is the sole
  113. responsibility of the user her/him self.
  114.  
  115.  
  116. A few words about distribution:
  117.  
  118. This program is freeware. You can distribute it as long as _ALL_ files are
  119. included and not more than a nominal fee for copying is asked. This program
  120. can _NOT_ be used for commercial purposes without written permission from the
  121. author and a contribution for development costs (like Coca-Cola :-). If you
  122. have suggestions or remarks about this program, or if you find any bugs,
  123. please let me know.
  124.  
  125. THIS MEANS: IF YOU ARE GOING TO USE THIS IN COMMERCIAL SOFTWARE YOU SHOULD AT
  126. LEAST ASK ME FIRST AND I WOULD BE GLAD TO RECEIVE SOMETHING AS A COMPENSATION
  127. FOR THE TROUBLE THIS THING HAS CAUSED ME, BECAUSE MAKING THIS HASN'T BEEN JUST
  128. FUN AND SUNSHINE... 
  129.  
  130. This was meant especially to software houses using this without my permission,
  131. like Team 17: From where the hell did you get that P41 you used in Super Frog?!?
  132. It was never released due to P50. I just gave it to some friends for beta
  133. testing... If you want to clear your conscience, contact me.
  134.  
  135. To everyone: If you're going to use this player in your commercial software, you
  136. should know, that the one released is never the newest version and is always
  137. somewhat cut down. If you contact (and pay...) me, you get misc stuff like sound
  138. effect engines with it, if you want. And tidy conscience...
  139.  
  140.  
  141. 3. Requirements:
  142. ­­­­­­­­­­­­­­­­
  143.  
  144. - An Amiga computer (If we get some GUS-cards, PC-version is also coming)
  145. - Reqtools.library and Powerpacker.library
  146. - about 30 kB of memory for the converter, and if converting, 2 * (number of
  147.   patterns * 1024 + 1084) bytes for buffers
  148. - Works on 512kB machines, more memory recommended, at least for converting.
  149. - Kickstart 1.2 or greater.
  150. - Kickstart 2.0-style colors recommended (looks better)
  151.  
  152.  
  153.  
  154. 4. Features:
  155. ­­­­­­­­­­­­
  156.  
  157. - a very efficient method to pack the pattern data and play it in realtime
  158.  
  159. - cut-down header compared to the original one (4 bytes info, 6 bytes/sample,
  160.   8 bytes/pattern, 1 byte/position plus one byte for stopmark)
  161.  
  162. - removes all names, unused patterns, samples, data after loops, empty data
  163.   after unlooped samples, commands with no use and some smaller things
  164.  
  165. - Delta format samples! Samples have the same quality, but packing efficiency
  166.   is better with for example Imploder or Powerpacker. Look below for some stats!
  167.  
  168. - 4-bit delta packing! Packs samples in ratio 1:2 with very little loss of
  169.   quality. Try it!
  170.  
  171. - nearly impossible to rip without finding the call to the init routine, except
  172.   if the optional `P60A`-sign is used
  173.  
  174. - works on every Amiga, under KS1.2-3.1, from WB or CLI/Shell, detaches
  175.   itself from CLI, supports WB icons, etc...
  176.  
  177. - loads files packed with Powerpacker, FImp or XPK (all references to
  178.   Powerpacked files also apply to FImp and XPK files)
  179.  
  180. Should support modules with 100 patterns (At least in PT2.x from Noxious) IF
  181. patterns are packed under 64kB in PASS 1... (pointers are only words...)
  182.  
  183.  
  184. Commands implemented at the moment:
  185.   - NoiseTracker 2.0 commands (0-6,A-F)
  186.  
  187.   - Tremolo (7), Sample offset (9), Fine slides (E1/E2), Set finetune (E5),
  188.     Pattern loop (E6), Retrig note (E9), Fine volume slides (EA/EB),
  189.     Note cut (EC), Note delay (ED), Pattern delay (EE), Invert loop (EF)
  190.  
  191.   - finetune and tempo
  192.  
  193.   - NOTE!:Patternbreak (D) does NOT support break to a specified line, 
  194.     linenumber is just ignored! This is due to my packing system.
  195.  
  196.  
  197. Some statistics:
  198. ­­­­­­­­­­­­­­­­
  199.             Original    P60A    NP3.0    NP2.02    ProPacker 1.0
  200. Tune:            ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  201. ( alcoholic score )    121024        90118    93576*    104560*    108028
  202. enigma year bkh-nhp    249550        205984    214148*    227770*    226326
  203. knulla kuk !!!        160218        121834    128940*    138218*    147302
  204. menuloader        23390        16992    17588    18292    20414
  205. scrambled mind        163738        131420    132736    140614    148742
  206.  
  207. * = lacks some features (finetune, commands etc.)
  208.  
  209. Obvious?
  210.  
  211. The new Prorunner (with packing) didn't make it to this comparision, because
  212. I couldn't get it anywhere, but it's packing is nearly similar to the Player
  213. 3.0 ie. poor.
  214.  
  215.  
  216. Delta vs. normal samples:
  217. ­­­­­­­­­­­­­­­­­­­­­­­­­
  218. Tune:  ((( the war )))  by Audiomonster / Melon Dezign
  219.  
  220. Original P60 tune:            261338
  221. ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  222. Normal with FImp:            185118
  223. Delta with FImp:            168936
  224.                     ------
  225.                      16182
  226.  
  227. Normal with PP:                185012
  228. Delta with PP:                162812
  229.                     ------
  230.                      22200
  231.  
  232. Make your own decisions...
  233.  
  234.  
  235.  
  236. 5. P60con, the Converter:
  237. ­­­­­­­­­­­­­­­­­­­­­­­­­
  238.  
  239. Note!: Do _NOT_ merge hunks in this file, because it uses two SEPERATE code
  240. hunks for detaching. If you do, it crashes straight away...
  241.  
  242. Shell usage: P60con [-q][filename]
  243.  
  244. -q    Be quiet. The only way to stop playing is to give CTRL-C-signal to
  245.     the DETACHED piece of code. Use TaskX or similar.
  246. filename to play. No checkings made (can't!), so be sure it IS a P60-module!
  247.  
  248. WB usage is normal. Double clicking on a modules icon or click on module,
  249. shift and click on P60con to play it.
  250.  
  251.  
  252.  
  253.     1. Converting Protracker-modules:
  254.     ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  255.  
  256. First a normal Reqtools filerequster asks you to select one or more (supports
  257. batch-processing) modules. If you select multiple modules, the directory for
  258. the modules to be saved is asked. Then loading with the Powerpacker library.
  259. If you chose one module, the name and path for the save are asked. As the
  260. packing starts, an info requester with some bars and statistics pops up. If you
  261. are converting only one module and have sample packing on, sample packer-
  262. selector appears. When the job is done, save and some statistics about the
  263. efficiency are shown. If you have converted only one module, also the Usecode
  264. is here.
  265.  
  266.  
  267.  
  268.     2. Playing modules:
  269.     ­­­­­­­­­­­­­­­­­­­
  270.  
  271. First the converter asks for a module and then loads it using the Powerpacker
  272. library so it can also be packed with the Powerpacker :) DOES NOT SUPPORT FILES
  273. WITH SAMPLES IN OTHER FILE! If it finds P60 from the memory, it informs it to
  274. play the module. If not, a requester is shown with the name of the file and
  275. a stop gadget below. The play routine is the system friendly tempo one,
  276. allocates channels with priority 127, a CIA-timer and returns if it couldn't
  277. get something. Should work with every system friendly program.
  278.  
  279. To the guys at Triumph: I'd say this IS faster than yours and multitasks at
  280. least as well as your IntuiTracker 1.50 (I crashed it about x times...) and 
  281. works on <2.0 Kickstarts, too. Anyway, this wasn't meant to be a kind of
  282. player like yours, but maybe one is coming (depends on effort and requests
  283. from outside). But I still prefer MultiPlayer for playing Protracker modules...
  284.  
  285.  
  286.  
  287.     3. Converting back to Protracker:
  288.     ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  289.  
  290. There is in fact the good old P50-ripper with support for 4-bit deltas.
  291.  
  292. Usage is easy, just load P60A-module and save it as Protracker-module. Be sure
  293. it IS a P60A-module, otherwise I can't quarantee the result...
  294.  
  295.  
  296.     4. Sample packer-selector:
  297.     ­­­­­­­­­­­­­­­­­­­­­­­­­­
  298.  
  299. When you have sample packing-option on, a requester appears when you convert
  300. only one module. It is used to select which samples are to be packed with 
  301. 4-bit delta packing and has the following functions:
  302.  
  303. Original    -Plays the original sample. Stop with right mouse button!
  304. Packed        -Plays the sample after packing and depacking it. This sounds
  305.          same as the final packed sample. Stop with right mouse button!
  306. Pack        -Marks the sample to be packed.
  307. Pack rest    -Marks this and the rest of the samples to be packed.
  308. Don't pack    -Marks the sample NOT to be packed.
  309. Don't pack rest    -Marks this and the rest of the samples NOT to be packed.
  310.  
  311. Use of keyboard shortcuts is highly recommended!
  312.  
  313.  
  314.  
  315.     5. Preferences:
  316.     ­­­­­­­­­­­­­­­
  317.  
  318. Default loading directory:    The directory converter first gives you, when
  319.                 you load Protracker modules. 127 chars.
  320.  
  321. Default saving directory:    The directory converter first gives you, when
  322.                 you save ONE P60 module.
  323.  
  324. Default batch directory:    The directory converter first gives you, when
  325.                 you save multiple P60 modules.
  326.  
  327. Prefices:            These are used to mask files in filerequesters
  328.                 and put to the beginning of the filename,
  329.                 when saving. Can be up to 7 chars long.
  330.  
  331. Two files:            If you want samples and rest of the tune to
  332.                 be saved in separate files.
  333.  
  334. P60A sign:            If you want the P60A sign to be inserted in
  335.                 the beginning of the module.
  336.  
  337. No samples:            If you're converting multiple modules with
  338.                 same samples, this disables the saving of
  339.                 samples.
  340.  
  341. Tempo:                Whether the player should use tempo or not.
  342.  
  343. Icon:                If you want the icon to be saved with the
  344.                 module.
  345.  
  346. Delta:                If you want to use delta format samples.
  347.  
  348. Sample packing:            If you want to pack samples. Overrides delta
  349.                 settings.
  350.  
  351.  
  352. 6. P60, the Player:
  353. ­­­­­­­­­­­­­­­­­­­
  354.  
  355. This program was under work (and still is...) for quite a lot time. The idea
  356. came from Simply / Parallax, due to the fact that Multiplayer can't play P50-
  357. modules without GMOD-header and that makes modules about 6kb larger... So I
  358. had to get working. Two days before Assembly'93 I rewrote this program
  359. completely in a big hurry, so please forgive me those bugs that _will_ appear.
  360. Present program is the same, but plays P60-modules.
  361.  
  362. The interface is now quite neat, small is beautiful? Under KS3.0 those
  363. proportional gadgets are quite nice. Functions should be familiar to all
  364. who have used some player program (Multiplayer, Smartplay etc.). The only
  365. special feature is that if you try to load a Protracker module and you
  366. have P60con in memory waiting in its mainmenu, P60 gives this module to it to
  367. be packed. P60con saves it to the ram-disk and informs P60 to load it. After
  368. loading P60 deletes the module from the ram-disk.
  369.  
  370.  
  371.  
  372. 7. Using The Player in your own programs:
  373. ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  374.  
  375. NOTE: The instructions for the binaryfile-versions expect you to have loaded
  376. the file to a label called "Player"
  377.  
  378. The versions are in the same file and these topics describe the various
  379. possible versions to compile the source. Also the binary versions have their
  380. instructions here.
  381.  
  382. Completely PC-relative!
  383.  
  384.  
  385.  
  386.     1. Normal VBlank version:
  387.     ­­­­­­­­­­­­­­­­­­­­­­­­­
  388.  
  389. Options:
  390.     CIA = 0
  391.     system = 0
  392.     nonlev6 = 0
  393.  
  394.     Exec = 1 if ExecBase is valid and 0 if not
  395.  
  396. This should be easy for all you who've used the ugly Protracker routine or
  397. one of the millions of others.
  398.  
  399. Call "P60_Init" with the address to the module in A0 and the address to the
  400. samples in A1 or if they are in the same file, clear A1. If you have a module
  401. with samples packed, put address to the sample buffer in A2. Uses all registers,
  402. so preserve them if you're going to use them afterwards.
  403.  
  404. TO CHECK IF MODULE HAS PACKED SAMPLES:
  405. ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  406. Check bit 6 ($40) of the offset 3 from the beginning (excluding optional sign).
  407. If it is set, the module has packed samples. Size of the required buffer is then
  408. at offset 4.
  409.  
  410. To play the music, call P60_Music every frame (with NTSCs who want to play
  411. the tune in PAL-speed or vice versa, use the CIA-version).
  412.  
  413. To end the music and turn the DMAs off, call P60_End.
  414.  
  415. With the binary file, P60_Init is Player+P60_InitOffset, P60_Music is
  416. Player+P60_MusicOffset and P60_End is Player+P60_EndOffset.
  417.  
  418. The source-version can be compiled with at least Asm-One 1.09 by T.F.A. (the 
  419. Best assembler around!) but it should compile with nearly any assembler.
  420.  
  421. The maximum rastertime taken is under 6 lines on a normal 68000 Amiga. Fast?
  422. Invert loop can take it beyond that, though. Everything has its costs.
  423.  
  424. NOTE: Works perfectly on AGA- and turbomachines, due to the VBR-check. Am I
  425. the lonely one to check the VBR before banging the interrupt-vectors?
  426.  
  427.  
  428.  
  429.     2. Non-lev6 version:
  430.     ­­­­­­­­­­­­­­­­­­­­
  431.  
  432. Options:
  433.     CIA = 0
  434.     system = 0
  435.     nonlev6 = 1
  436.  
  437. This routine is basically the same as the lev6-version, but you have to call
  438. P60_Setloop about 7 raster lines after P60_Music. This system is done to
  439. enable the use of those 7 lines. So if have a routine, which fits to these
  440. 7 lines, do it while waiting...
  441.  
  442. This is not too much slower compared to the lev6-version, but I'd still
  443. advise you to use it if possible. It makes your life a hell lot easier...
  444.  
  445.  
  446.  
  447.     3. CIA version with tempo:
  448.     ­­­­­­­­­­­­­­­­­­­­­­­­­­
  449.  
  450. Options:
  451.     CIA = 1
  452.     system = 0/1
  453.     nonlev6 = 0
  454.  
  455.     Exec = 1 if ExecBase is valid and 0 if not
  456.  
  457. The first tempoplayer I know, which uses only the lev6-int and does _NOT_
  458. use those fucking processor loops. As fast as the normal lev6-version!
  459.  
  460. Otherwise normal init, but some info for the setting of CIA is needed in D0:
  461. 0 - Autodetect, if PAL/NTSC, uses ExecBase->VBlankFrequency.
  462. 1 - Force PAL. If you've destroyed the ExecBase, detect the timing
  463.     yourself and use these force modes.
  464. 2 - Force NTSC
  465.  
  466. No further actions needed. Returns non-zero in D0, if it couldn't allocate
  467. something. The player starts playing right away, so do _NOT_ call P60_Music.
  468.  
  469. To end call the normal P60_End.
  470.  
  471. To enable using of tempo, set P60_UseTempo to some non-zero value.
  472.  
  473. If system is set to 1, allocations for timer and channels are included. Use
  474. if possible.
  475.  
  476. NOTE: If you want to use this in your own program that needs synchronizing to
  477. the beam, do one of these:
  478.  
  479. 1. Do your routine in VBlank-interrupt.
  480. 2. If you do NOT have to wait for a specific line, wait for VBlank bit in
  481.    INTREQR ($1e) and clear it afterwards.
  482. 3. If you have to wait for some specified line, disable Copper-interrupt from
  483.    INTENA ($9a), set Copper-interrupt bit in INTREQ ($9c) with Copper at the
  484.    specified line and wait for the bit in INTREQR ($1e) in our own routine.
  485.    Clear it afterwards.
  486.  
  487. See the examples supplied.
  488.  
  489. Otherwise this WILL steal some frames from you time to time...
  490.  
  491.  
  492.  
  493.     4. 68020-versions:
  494.     ­­­­­­­­­­­­­­­­­­
  495.  
  496. Options:
  497.     opt020 = 1
  498.  
  499. These are a bit optimized versions for the 020+ machines. The difference to
  500. the 000/010-versions is only a slight one and because those versions take only
  501. a half of a rasterline on a 25mhz A4000, I think these are nearly useless. But
  502. if you really want to make a 020+ program or AGA-only stuff, this is for you...
  503.  
  504. Can be compiled at least with Asm-One 1.15 by T.F.A.
  505.  
  506. Interface is similar to the 000/010-versions.
  507.  
  508.  
  509.  
  510.     5. Player6.i:
  511.     ­­­­­­­­­­­­­
  512.  
  513. This is the include file of all the structures needed, if you're going to 
  514. compile the source. Also if you are making some additions to this player
  515. (like quadrascopes, etc. (these kind of things are maybe coming, I already have
  516. quite a bunch of 'em linked to this player)) you can look for the information
  517. there. First I was going to release this only as a binary version, but after
  518. thinking a few more moments, I decided to make this include file and release
  519. the source, just to make supporting and developing of this product possible.
  520.  
  521.  
  522.  
  523. 8. The Usecode-system:
  524. ­­­­­­­­­­­­­­­­­­­­­­
  525.  
  526. This system was created for fun on a sunny afternoon. I got a crazy idea of
  527. putting a code of which features a module needs to the beginning of the source
  528. and let conditional compiling take care of the rest.
  529.  
  530. The main idea is to reduce the lenght of this massive player to the real needs
  531. of the module. So only the commands the module needs are saved to the player.
  532. Also if the module doesn't use finetune, a smaller periodtable is used. And
  533. finally if the module doesn't use vibrato or tremolo, the 1kb-long vibratotable
  534. is left out.
  535.  
  536. What you have to do is:
  537.  
  538. Take down the Usecode shown in the requester after the converter has packed
  539. your module (if only one module is being processed) and put this code to the
  540. beginning of the source into the place for it. Compile and you have a
  541. customised version for this module only. Usecode -1 leaves all features ie.
  542. compiles the full version.
  543.  
  544. for example: 
  545.     use = $9f0f
  546.  
  547.  
  548.  
  549. 9. Bugs?:
  550. ­­­­­­­­­
  551.  
  552. Some of you might still remember (in horror...) the previous versions of this
  553. marvelous :) player. Those 4.x-versions were all more or less beta-versions and
  554. that showed... (previous versions weren't even released, thank god..)
  555.  
  556. This version has gone through quite a hell of beta-testing, by myself, my Good
  557. friends Janne Juhola (Simply/Parallax), Steffan Schumacher (Metal/Parallax),
  558. Kari-Pekka Koljonen (Moonstone/Hippopotamus Design), WDO/Carillon (never
  559. remember your name...Mikko?) and some others.
  560.  
  561.  
  562.  
  563. 10. Hellos:
  564. ­­­­­­­­­­­
  565.  
  566. A bit more hellos than in the converter to:
  567.  
  568. To all who make those nice multiformat-player-programs (Multiplayer, Smartplay,
  569. etc.): If you want some information about this format to be included in your
  570. program, or anything else, just let me know!
  571.  
  572. To Turbo and Marley of Infect (authors of Exotic ripper): You did it! I just ask
  573. how?!? You say it's deep search and it surely is. "Unfortunately" 2.17 didn't
  574. catch these P60-modules, although the format is nearly the same. Anyway, Fab
  575. prog!
  576.  
  577.  
  578. And hellos especially to:
  579.  
  580. - Janne Oksanen / Stratos of Sahara Surfers -
  581. The demo will be a shock!
  582.  
  583. - Kari-Pekka Koljonen / Moonstone of Hippopotamus Design -
  584. Great sendings (when coming...). Happy with this?
  585.  
  586. Should write something new...
  587.  
  588.  
  589.  
  590. 11. Contact address:
  591. ­­­­­­­­­­­­­­­­­­­­
  592.  
  593. I'm improving this utility for my own use (they made me release this!), but
  594. send me some $$$ (Finnish marks, please) or two disks with a return envelope
  595. WITH stamps and I'll send you the newest version (Mention which version you
  596. have, so I won't send the same version!) Also for licences for commercial use!
  597.  
  598.     TO:                        (NO swapping!)
  599.               J.Paananen
  600.             Puskalantie 6
  601.              37120 Nokia
  602.                Finland
  603.  
  604.         Or by phone: +358-31-3422147 / Jarno
  605.